{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "# A brief tour of the IPython notebook\n",
      "\n",
      "This document will give you a brief tour of the capabilities of the IPython notebook.  \n",
      "You can view its contents by scrolling around, or execute each cell by typing `Shift-Enter`.\n",
      "\n",
      "The rest of the notebooks in this directory illustrate various other aspects and \n",
      "capabilities of the IPython notebook; some of them may require additional libraries to be executed.\n",
      "\n",
      "**NOTE:** This notebook *must* be run from its own directory, so you must ``cd``\n",
      "to this directory and then start the notebook, but do *not* use the ``--notebook-dir``\n",
      "option to run it from another location.\n",
      "\n",
      "The first thing you need to know is that you are still controlling the same old IPython you're used to,\n",
      "so things like shell aliases and magic commands still work:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "pwd"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 1,
       "text": [
        "u'/home/fperez/ipython/tutorial/notebooks'"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ls"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\u001b[0m\u001b[00manimation.m4v\u001b[0m                        \u001b[00mP10 Basic Interface.ipynb\u001b[0m\r\n",
        "\u001b[00margv.py\u001b[0m                              \u001b[00mP15 Parallel Magics.ipynb\u001b[0m\r\n",
        "\u001b[01;32mcat.py\u001b[0m*                              \u001b[00mP20 Multiplexing.ipynb\u001b[0m\r\n",
        "\u001b[00mCell Magics.ipynb\u001b[0m                    \u001b[00mP21 LoadBalancing.ipynb\u001b[0m\r\n",
        "\u001b[00mDisplay control.ipynb\u001b[0m                \u001b[00mP30 Working with MPI.ipynb\u001b[0m\r\n",
        "\u001b[01;36mfigs\u001b[0m/                                \u001b[00mP99 Summary.ipynb\u001b[0m\r\n",
        "\u001b[00mfoo.py\u001b[0m                               \u001b[00mPX01 Example - Remote Iteration.ipynb\u001b[0m\r\n",
        "\u001b[01;32mlnum.py\u001b[0m*                             \u001b[00mpython-logo.svg\u001b[0m\r\n",
        "\u001b[00mmyscript.py\u001b[0m                          \u001b[00mPZ Performance.ipynb\u001b[0m\r\n",
        "\u001b[01;34mnb\u001b[0m@                                  \u001b[01;36msoln\u001b[0m/\r\n",
        "\u001b[00mnbtour.ipynb\u001b[0m                         \u001b[01;32mtext_analysis.py\u001b[0m*\r\n",
        "\u001b[00mP01 Overview and Architecture.ipynb\u001b[0m\r\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "message = 'The IPython notebook is great!'\n",
      "# note: the echo command does not run on Windows, it's a unix command.\n",
      "!echo $message"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "The IPython notebook is great!\r\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Plots with matplotlib"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "IPython adds an 'inline' matplotlib backend,\n",
      "which embeds any matplotlib figures into the notebook."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
        "For more information, type 'help(pylab)'.\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "x = linspace(0, 3*pi, 500)\n",
      "plot(x, sin(x**2))\n",
      "title('A simple chirp');"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n"
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "You can paste blocks of input with prompt markers, such as those from\n",
      "[the official Python tutorial](http://docs.python.org/tutorial/interpreter.html#interactive-mode)"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      ">>> the_world_is_flat = 1\n",
      ">>> if the_world_is_flat:\n",
      "...     print \"Be careful not to fall off!\""
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Be careful not to fall off!\n"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Errors are shown in informative ways:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%run non_existent_file"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "ERROR: File `u'non_existent_file.py'` not found."
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "x = 1\n",
      "y = 4\n",
      "z = y/(1-x)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "ename": "ZeroDivisionError",
       "evalue": "integer division or modulo by zero",
       "output_type": "pyerr",
       "traceback": [
        "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m                         Traceback (most recent call last)",
        "\u001b[1;32m<ipython-input-8-dc39888fd1d2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
        "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "When IPython needs to display additional information (such as providing details on an object via `x?`\n",
      "it will automatically invoke a pager at the bottom of the screen:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "magic"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 9
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Non-blocking output of kernel\n",
      "\n",
      "If you execute the next cell, you will see the output arriving as it is generated, not all at the end."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import time, sys\n",
      "for i in range(8):\n",
      "    print i,\n",
      "    time.sleep(0.5)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "0 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "3 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "4 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "5 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "6 "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "7\n"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Clean crash and restart\n",
      "\n",
      "We call the low-level system libc.time routine with the wrong argument via\n",
      "ctypes to segfault the Python interpreter:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import sys\n",
      "from ctypes import CDLL\n",
      "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n",
      "dll = 'dylib' if sys.platform == 'darwin' else 'so.6'\n",
      "libc = CDLL(\"libc.%s\" % dll) \n",
      "libc.time(-1)  # BOOM!!"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Markdown cells can contain formatted text and code\n",
      "\n",
      "You can *italicize*, **boldface**\n",
      "\n",
      "* build\n",
      "* lists\n",
      "\n",
      "and embed code meant for illustration instead of execution in Python:\n",
      "\n",
      "    def f(x):\n",
      "        \"\"\"a docstring\"\"\"\n",
      "        return x**2\n",
      "\n",
      "or other languages:\n",
      "\n",
      "    if (i=0; i<n; i++) {\n",
      "      printf(\"hello %d\\n\", i);\n",
      "      x += 4;\n",
      "    }"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Courtesy of MathJax, you can include mathematical expressions both inline: \n",
      "$e^{i\\pi} + 1 = 0$  and displayed:\n",
      "\n",
      "$$e^x=\\sum_{i=0}^\\infty \\frac{1}{i!}x^i$$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Rich displays: include anyting a browser can show\n",
      "\n",
      "Note that we have an actual protocol for this, see the `display_protocol` notebook for further details.\n",
      "\n",
      "### Images"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import Image\n",
      "Image(filename='figs/logo.png')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "png": "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\n",
       "prompt_number": 1,
       "text": [
        "<IPython.core.display.Image at 0x426bc10>"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "An image can also be displayed from raw data or a url"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Image(url='http://python.org/images/python-logo.gif')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<img src=\"http://python.org/images/python-logo.gif\" />"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 2,
       "text": [
        "<IPython.core.display.Image at 0x426bb50>"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "SVG images are also supported out of the box (since modern browsers do a good job of rendering them):"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import SVG\n",
      "SVG(filename='figs/python-logo.svg')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 3,
       "svg": [
        "<svg height=\"115.02pt\" id=\"svg2\" inkscape:version=\"0.43\" sodipodi:docbase=\"/home/sdeibel\" sodipodi:docname=\"logo-python-generic.svg\" sodipodi:version=\"0.32\" version=\"1.0\" width=\"388.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:cc=\"http://web.resource.org/cc/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:sodipodi=\"http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
        "  <metadata id=\"metadata2193\">\n",
        "    <rdf:RDF>\n",
        "      <cc:Work rdf:about=\"\">\n",
        "        <dc:format>image/svg+xml</dc:format>\n",
        "        <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
        "      </cc:Work>\n",
        "    </rdf:RDF>\n",
        "  </metadata>\n",
        "  <sodipodi:namedview bordercolor=\"#666666\" borderopacity=\"1.0\" id=\"base\" inkscape:current-layer=\"svg2\" inkscape:cx=\"243.02499\" inkscape:cy=\"71.887497\" inkscape:pageopacity=\"0.0\" inkscape:pageshadow=\"2\" inkscape:window-height=\"543\" inkscape:window-width=\"791\" inkscape:window-x=\"0\" inkscape:window-y=\"0\" inkscape:zoom=\"1.4340089\" pagecolor=\"#ffffff\"/>\n",
        "  <defs id=\"defs4\">\n",
        "    <linearGradient id=\"linearGradient2795\">\n",
        "      <stop id=\"stop2797\" offset=\"0\" style=\"stop-color:#b8b8b8;stop-opacity:0.49803922\"/>\n",
        "      <stop id=\"stop2799\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
        "    </linearGradient>\n",
        "    <linearGradient id=\"linearGradient2787\">\n",
        "      <stop id=\"stop2789\" offset=\"0\" style=\"stop-color:#7f7f7f;stop-opacity:0.5\"/>\n",
        "      <stop id=\"stop2791\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
        "    </linearGradient>\n",
        "    <linearGradient id=\"linearGradient3676\">\n",
        "      <stop id=\"stop3678\" offset=\"0\" style=\"stop-color:#b2b2b2;stop-opacity:0.5\"/>\n",
        "      <stop id=\"stop3680\" offset=\"1\" style=\"stop-color:#b3b3b3;stop-opacity:0\"/>\n",
        "    </linearGradient>\n",
        "    <linearGradient id=\"linearGradient3236\">\n",
        "      <stop id=\"stop3244\" offset=\"0\" style=\"stop-color:#f4f4f4;stop-opacity:1\"/>\n",
        "      <stop id=\"stop3240\" offset=\"1\" style=\"stop-color:#ffffff;stop-opacity:1\"/>\n",
        "    </linearGradient>\n",
        "    <linearGradient id=\"linearGradient4671\">\n",
        "      <stop id=\"stop4673\" offset=\"0\" style=\"stop-color:#ffd43b;stop-opacity:1\"/>\n",
        "      <stop id=\"stop4675\" offset=\"1\" style=\"stop-color:#ffe873;stop-opacity:1\"/>\n",
        "    </linearGradient>\n",
        "    <linearGradient id=\"linearGradient4689\">\n",
        "      <stop id=\"stop4691\" offset=\"0\" style=\"stop-color:#5a9fd4;stop-opacity:1\"/>\n",
        "      <stop id=\"stop4693\" offset=\"1\" style=\"stop-color:#306998;stop-opacity:1\"/>\n",
        "    </linearGradient>\n",
        "    <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2987\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
        "    <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2990\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>\n",
        "    <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2587\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>\n",
        "    <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2589\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
        "    <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2248\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>\n",
        "    <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2250\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
        "    <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2255\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
        "    <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2258\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"76.176224\" y2=\"76.313133\"/>\n",
        "    <radialGradient cx=\"61.518883\" cy=\"132.28575\" fx=\"61.518883\" fy=\"132.28575\" gradientTransform=\"matrix(1,0,0,0.177966,0,108.7434)\" gradientUnits=\"userSpaceOnUse\" id=\"radialGradient2801\" r=\"29.036913\" xlink:href=\"#linearGradient2795\"/>\n",
        "    <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient1475\" x1=\"150.96111\" x2=\"112.03144\" xlink:href=\"#linearGradient4671\" y1=\"192.35176\" y2=\"137.27299\"/>\n",
        "    <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient1478\" x1=\"26.648937\" x2=\"135.66525\" xlink:href=\"#linearGradient4689\" y1=\"20.603781\" y2=\"114.39767\"/>\n",
        "    <radialGradient cx=\"61.518883\" cy=\"132.28575\" fx=\"61.518883\" fy=\"132.28575\" gradientTransform=\"matrix(2.382716e-8,-0.296405,1.43676,4.683673e-7,-128.544,150.5202)\" gradientUnits=\"userSpaceOnUse\" id=\"radialGradient1480\" r=\"29.036913\" xlink:href=\"#linearGradient2795\"/>\n",
        "  </defs>\n",
        "  <g id=\"g2303\">\n",
        "    <path d=\"M 184.61344,61.929363 C 184.61344,47.367213 180.46118,39.891193 172.15666,39.481813 C 168.85239,39.325863 165.62611,39.852203 162.48754,41.070593 C 159.98254,41.967323 158.2963,42.854313 157.40931,43.751043 L 157.40931,78.509163 C 162.72147,81.842673 167.43907,83.392453 171.55234,83.148783 C 180.25649,82.573703 184.61344,75.507063 184.61344,61.929363 z M 194.85763,62.533683 C 194.85763,69.931723 193.12265,76.072393 189.63319,80.955683 C 185.7441,86.482283 180.35396,89.328433 173.46277,89.484393 C 168.26757,89.650093 162.91642,88.022323 157.40931,84.610843 L 157.40931,116.20116 L 148.50047,113.02361 L 148.50047,42.903043 C 149.96253,41.109583 151.84372,39.569543 154.12454,38.263433 C 159.42696,35.173603 165.86978,33.584823 173.45302,33.506853 L 173.57973,33.633563 C 180.50991,33.545833 185.85132,36.391993 189.60395,42.162263 C 193.10315,47.454933 194.85763,54.238913 194.85763,62.533683 z \" id=\"path46\" style=\"fill:#646464;fill-opacity:1\"/>\n",
        "    <path d=\"M 249.30487,83.265743 C 249.30487,93.188283 248.31067,100.05998 246.32227,103.88084 C 244.32411,107.7017 240.52275,110.75254 234.90842,113.02361 C 230.35653,114.81707 225.43425,115.79178 220.15133,115.95748 L 218.67952,110.34316 C 224.05016,109.61213 227.83204,108.88109 230.02513,108.15006 C 234.34309,106.688 237.30621,104.44617 238.93397,101.44406 C 240.24008,98.997543 240.88339,94.328693 240.88339,87.418003 L 240.88339,85.098203 C 234.79146,87.866373 228.40711,89.240713 221.73036,89.240713 C 217.34417,89.240713 213.47457,87.866373 210.14107,85.098203 C 206.39818,82.086343 204.52674,78.265483 204.52674,73.635623 L 204.52674,36.557693 L 213.43558,33.506853 L 213.43558,70.828453 C 213.43558,74.815013 214.7222,77.885353 217.29543,80.039463 C 219.86866,82.193563 223.20217,83.226753 227.2862,83.148783 C 231.37023,83.061053 235.74667,81.482023 240.39603,78.392203 L 240.39603,34.851953 L 249.30487,34.851953 L 249.30487,83.265743 z \" id=\"path48\" style=\"fill:#646464;fill-opacity:1\"/>\n",
        "    <path d=\"M 284.08249,88.997033 C 283.02006,89.084753 282.04535,89.123743 281.14862,89.123743 C 276.10937,89.123743 272.18129,87.924853 269.37413,85.517323 C 266.57671,83.109793 265.17314,79.786033 265.17314,75.546053 L 265.17314,40.456523 L 259.07146,40.456523 L 259.07146,34.851953 L 265.17314,34.851953 L 265.17314,19.968143 L 274.07223,16.800333 L 274.07223,34.851953 L 284.08249,34.851953 L 284.08249,40.456523 L 274.07223,40.456523 L 274.07223,75.302373 C 274.07223,78.645623 274.96896,81.014163 276.76243,82.398253 C 278.30247,83.538663 280.74899,84.191723 284.08249,84.357423 L 284.08249,88.997033 z \" id=\"path50\" style=\"fill:#646464;fill-opacity:1\"/>\n",
        "    <path d=\"M 338.02288,88.266003 L 329.11404,88.266003 L 329.11404,53.878273 C 329.11404,50.379063 328.29528,47.367213 326.66753,44.852463 C 324.78634,42.006313 322.17411,40.583233 318.82112,40.583233 C 314.73708,40.583233 309.6296,42.737343 303.4987,47.045563 L 303.4987,88.266003 L 294.58985,88.266003 L 294.58985,6.0687929 L 303.4987,3.2616329 L 303.4987,40.700203 C 309.191,36.557693 315.40963,34.481563 322.16436,34.481563 C 326.88196,34.481563 330.70282,36.070333 333.62694,39.238143 C 336.56082,42.405943 338.02288,46.353513 338.02288,51.071103 L 338.02288,88.266003 L 338.02288,88.266003 z \" id=\"path52\" style=\"fill:#646464;fill-opacity:1\"/>\n",
        "    <path d=\"M 385.37424,60.525783 C 385.37424,54.930953 384.31182,50.310833 382.19669,46.655673 C 379.68195,42.201253 375.77337,39.852203 370.49044,39.608523 C 360.72386,40.173863 355.85032,47.172273 355.85032,60.584263 C 355.85032,66.734683 356.86401,71.871393 358.91089,75.994413 C 361.52312,81.248093 365.44145,83.840823 370.66589,83.753103 C 380.47146,83.675123 385.37424,75.935933 385.37424,60.525783 z M 395.13109,60.584263 C 395.13109,68.547643 393.09395,75.175663 389.02941,80.468333 C 384.5555,86.394563 378.37584,89.367423 370.49044,89.367423 C 362.67328,89.367423 356.58135,86.394563 352.18541,80.468333 C 348.19885,75.175663 346.21044,68.547643 346.21044,60.584263 C 346.21044,53.098503 348.36455,46.801883 352.67276,41.674913 C 357.22466,36.236033 363.20937,33.506853 370.6074,33.506853 C 378.00545,33.506853 384.02914,36.236033 388.66877,41.674913 C 392.97697,46.801883 395.13109,53.098503 395.13109,60.584263 z \" id=\"path54\" style=\"fill:#646464;fill-opacity:1\"/>\n",
        "    <path d=\"M 446.20583,88.266003 L 437.29699,88.266003 L 437.29699,51.928853 C 437.29699,47.942293 436.0981,44.832973 433.70032,42.591133 C 431.30253,40.359053 428.10549,39.277123 424.11893,39.364853 C 419.8887,39.442833 415.86314,40.826913 412.04229,43.507363 L 412.04229,88.266003 L 403.13345,88.266003 L 403.13345,42.405943 C 408.26042,38.672813 412.97801,36.236033 417.28621,35.095623 C 421.35076,34.033193 424.93769,33.506853 428.02752,33.506853 C 430.14264,33.506853 432.13104,33.711543 434.00248,34.120913 C 437.50169,34.929923 440.34783,36.430973 442.54093,38.633823 C 444.98744,41.070593 446.20583,43.994723 446.20583,47.415943 L 446.20583,88.266003 z \" id=\"path56\" style=\"fill:#646464;fill-opacity:1\"/>\n",
        "    <path d=\"M 60.510156,6.3979729 C 55.926503,6.4192712 51.549217,6.8101906 47.697656,7.4917229 C 36.35144,9.4962267 34.291407,13.691825 34.291406,21.429223 L 34.291406,31.647973 L 61.103906,31.647973 L 61.103906,35.054223 L 34.291406,35.054223 L 24.228906,35.054223 C 16.436447,35.054223 9.6131468,39.73794 7.4789058,48.647973 C 5.0170858,58.860939 4.9078907,65.233996 7.4789058,75.897973 C 9.3848341,83.835825 13.936449,89.491721 21.728906,89.491723 L 30.947656,89.491723 L 30.947656,77.241723 C 30.947656,68.391821 38.6048,60.585475 47.697656,60.585473 L 74.478906,60.585473 C 81.933857,60.585473 87.885159,54.447309 87.885156,46.960473 L 87.885156,21.429223 C 87.885156,14.162884 81.755176,8.7044455 74.478906,7.4917229 C 69.872919,6.7249976 65.093809,6.3766746 60.510156,6.3979729 z M 46.010156,14.616723 C 48.779703,14.616723 51.041406,16.915369 51.041406,19.741723 C 51.041404,22.558059 48.779703,24.835473 46.010156,24.835473 C 43.23068,24.835472 40.978906,22.558058 40.978906,19.741723 C 40.978905,16.91537 43.23068,14.616723 46.010156,14.616723 z \" id=\"path1948\" style=\"fill:url(#linearGradient1478);fill-opacity:1\"/>\n",
        "    <path d=\"M 91.228906,35.054223 L 91.228906,46.960473 C 91.228906,56.191228 83.403011,63.960472 74.478906,63.960473 L 47.697656,63.960473 C 40.361823,63.960473 34.291407,70.238956 34.291406,77.585473 L 34.291406,103.11672 C 34.291406,110.38306 40.609994,114.65704 47.697656,116.74172 C 56.184987,119.23733 64.323893,119.68835 74.478906,116.74172 C 81.229061,114.78733 87.885159,110.85411 87.885156,103.11672 L 87.885156,92.897973 L 61.103906,92.897973 L 61.103906,89.491723 L 87.885156,89.491723 L 101.29141,89.491723 C 109.08387,89.491723 111.98766,84.056315 114.69765,75.897973 C 117.49698,67.499087 117.37787,59.422197 114.69765,48.647973 C 112.77187,40.890532 109.09378,35.054223 101.29141,35.054223 L 91.228906,35.054223 z M 76.166406,99.710473 C 78.945884,99.710476 81.197656,101.98789 81.197656,104.80422 C 81.197654,107.63057 78.945881,109.92922 76.166406,109.92922 C 73.396856,109.92922 71.135156,107.63057 71.135156,104.80422 C 71.135158,101.98789 73.396853,99.710473 76.166406,99.710473 z \" id=\"path1950\" style=\"fill:url(#linearGradient1475);fill-opacity:1\"/>\n",
        "    <path d=\"M 463.5544,26.909383 L 465.11635,26.909383 L 465.11635,17.113143 L 468.81648,17.113143 L 468.81648,15.945483 L 459.85427,15.945483 L 459.85427,17.113143 L 463.5544,17.113143 L 463.5544,26.909383 M 470.20142,26.909383 L 471.53589,26.909383 L 471.53589,17.962353 L 474.4323,26.908259 L 475.91799,26.908259 L 478.93615,17.992683 L 478.93615,26.909383 L 480.39194,26.909383 L 480.39194,15.945483 L 478.46605,15.945483 L 475.16774,25.33834 L 472.35477,15.945483 L 470.20142,15.945483 L 470.20142,26.909383\" id=\"text3004\" style=\"font-size:15.16445827px;font-style:normal;font-weight:normal;line-height:125%;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans\"/>\n",
        "    <path d=\"M 110.46717 132.28575 A 48.948284 8.6066771 0 1 1  12.570599,132.28575 A 48.948284 8.6066771 0 1 1  110.46717 132.28575 z\" id=\"path1894\" style=\"opacity:0.44382019;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\" transform=\"matrix(0.73406,0,0,0.809524,16.24958,27.00935)\"/>\n",
        "  </g>\n",
        "</svg>"
       ],
       "text": [
        "<IPython.core.display.SVG at 0x426bfd0>"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### Video"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "And more exotic objects can also be displayed, as long as their representation supports \n",
      "the IPython display protocol.\n",
      "\n",
      "For example, videos hosted externally on YouTube are easy to load (and writing a similar wrapper for other\n",
      "hosted content is trivial):"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import YouTubeVideo\n",
      "# a talk about IPython at Sage Days at U. Washington, Seattle.\n",
      "# Video credit: William Stein.\n",
      "YouTubeVideo('1j_HxD4iLn8')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "\n",
        "        <iframe\n",
        "            width=\"400\"\n",
        "            height=300\"\n",
        "            src=\"https://www.youtube.com/embed/1j_HxD4iLn8\"\n",
        "            frameborder=\"0\"\n",
        "            allowfullscreen\n",
        "        ></iframe>\n",
        "        "
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 1,
       "text": [
        "<IPython.lib.display.YouTubeVideo at 0x10ed50d50>"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Using the nascent video capabilities of modern browsers, you may also be able to display local\n",
      "videos.  At the moment this doesn't work very well in all browsers, so it may or may not work for you;\n",
      "we will continue testing this and looking for ways to make it more robust.  \n",
      "\n",
      "The following cell loads a local file called  `animation.m4v`, encodes the raw video as base64 for http\n",
      "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control\n",
      "bar at the bottom with a play/pause button and a location slider."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import HTML\n",
      "video = open(\"figs/animation.m4v\", \"rb\").read()\n",
      "video_encoded = video.encode(\"base64\")\n",
      "video_tag = '<video controls alt=\"test\" src=\"data:video/x-m4v;base64,{0}\">'.format(video_encoded)\n",
      "HTML(data=video_tag)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<video controls alt=\"test\" src=\"data:video/x-m4v;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAqiW1kYXQAAAKMBgX//4jcRem9\n",
        "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTE4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv\n",
        "cHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w\n",
        "dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o\n",
        "ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2\n",
        "IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0\n",
        "X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBu\n",
        "cj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9p\n",
        "bnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEg\n",
        "d2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBz\n",
        "Y2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9\n",
        "MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89\n",
        "MS40MCBhcT0xOjEuMDAAgAAACqVliIQAV/0TAAI/3gU2tIW7KawwaCmQGTGHKmuYAAADACBcshU+\n",
        "yICkgAA14AHowiEeT6ei7v7h3Hu0i2fpUBLGBIkbCMP3Vfz+9BVGCDXnw9Uv5o3iN030tb7eq6rs\n",
        "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\n",
        "\">"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 2,
       "text": [
        "<IPython.core.display.HTML at 0x1083bc9d0>"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Local Files\n",
      "\n",
      "The above examples embed images and video from the notebook filesystem in the output\n",
      "areas of code cells.  It is also possible to request these files directly in markdown cells\n",
      "if they reside in the notebook directory via relative urls prefixed with `files/`:\n",
      "\n",
      "    files/[subdirectory/]<filename>\n",
      "\n",
      "\n",
      "For example, in the example notebook folder, we have the Python logo, addressed as:\n",
      "\n",
      "    <img src=\"files/figs/python-logo.svg\" />\n",
      "\n",
      "<img src=\"/files/figs/python-logo.svg\" />\n",
      "\n",
      "and a video with the HTML5 video tag:\n",
      "\n",
      "    <video controls src=\"files/figs/animation.m4v\" />\n",
      "\n",
      "<video controls src=\"/files/figs/animation.m4v\" />\n",
      "\n",
      "These do not embed the data into the notebook file,\n",
      "and require that the files exist when you are viewing the notebook.\n",
      "\n",
      "### Security of local files\n",
      "\n",
      "Note that this means that the IPython notebook server also acts as a generic file server\n",
      "for files inside the same tree as your notebooks.  Access is not granted outside the\n",
      "notebook folder so you have strict control over what files are visible, but for this\n",
      "reason it is highly recommended that you do not run the notebook server with a notebook\n",
      "directory at a high level in your filesystem (e.g. your home directory).\n",
      "\n",
      "When you run the notebook in a password-protected manner, local file access is restricted\n",
      "to authenticated users unless read-only views are active."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### External sites\n",
      "\n",
      "You can even embed an entire page from another site in an iframe; for example this is today's Wikipedia\n",
      "page for mobile users:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "HTML('<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350>')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 3,
       "text": [
        "<IPython.core.display.HTML at 0x1083bc390>"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "# Loading external codes\n",
      "* Drag and drop a ``.py`` in the dashboard\n",
      "* Use ``%load`` with any local or remote url: [the Matplotlib Gallery!](http://matplotlib.sourceforge.net/gallery.html)\n",
      "\n",
      "In this notebook we've kept the output saved so you can see the result, but you should run the next\n",
      "cell yourself (with an active internet connection)."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's make sure we have pylab again, in case we have restarted the kernel due to the crash demo above"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
        "For more information, type 'help(pylab)'.\n"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 11
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Mathematics and SymPy support\n",
      "\n",
      "And we also support the display of mathematical expressions typeset in LaTeX, which is rendered\n",
      "in the browser thanks to the [MathJax library](http://mathjax.org).  \n",
      "\n",
      "Note that this is *different* from the above examples.  Above we were typing mathematical expressions\n",
      "in Markdown cells (along with normal text) and letting the browser render them; now we are displaying\n",
      "the output of a Python computation as a LaTeX expression wrapped by the `Math()` object so the browser\n",
      "renders it.  The `Math` object will add the needed LaTeX delimiters (`$$`) if they are not provided:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import Math\n",
      "Math(r'F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 14,
       "text": [
        "<IPython.core.display.Math at 0x43f5850>"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "With the `Latex` class, you have to include the delimiters yourself.  This allows you to use other LaTeX modes such as `eqnarray`:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import Latex\n",
      "Latex(r\"\"\"\\begin{eqnarray}\n",
      "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
      "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
      "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
      "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
      "\\end{eqnarray}\"\"\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "\\begin{eqnarray}\n",
        "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
        "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
        "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
        "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
        "\\end{eqnarray}"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 15,
       "text": [
        "<IPython.core.display.Latex at 0x43f5650>"
       ]
      }
     ],
     "prompt_number": 15
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Using these tools, we can integrate with the [SymPy](http://sympy.org) package to perform symbolic manipulations,\n",
      "and combined with numpy and matplotlib, also displays numerical visualizations of symbolically\n",
      "constructed expressions.\n",
      "\n",
      "We first load sympy printing and plotting support, as well as all of sympy:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%load_ext sympyprinting\n",
      "%pylab inline\n",
      "\n",
      "from __future__ import division\n",
      "import sympy as sym\n",
      "from sympy import *\n",
      "x, y, z = symbols(\"x y z\")\n",
      "k, m, n = symbols(\"k m n\", integer=True)\n",
      "f, g, h = map(Function, 'fgh')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
        "For more information, type 'help(pylab)'.\n"
       ]
      }
     ],
     "prompt_number": 16
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h2>Elementary operations</h2>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Rational(3,2)*pi + exp(I*x) / (x**2 + y)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\frac{3}{2} \\pi + \\frac{e^{\\mathbf{\\imath} x}}{x^{2} + y}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAFAAAAAlCAYAAADV/m7fAAAABHNCSVQICAgIfAhkiAAAA9xJREFU\naIHt2l2IVVUUwPHfzDQ4hc1UFpaVTvoiKNoHaTCmU/lQaERR9mGUZBSkUVEQvcR9CSKIoCgoom5F\nBX2T+RD6EBQVZI1BBoVSFA0JUkNiiX1MD+uc5szkOPfjnHvvyP3DwF4z96y1Zp+91l577Uubuuho\ntgMNYikG8TU+wwosxs9YjTvwWy2Kj8mMV2IeZiTGythem78txwjmYitOxHs4G7vwthonbyL7cHMy\nvga/4/g8FLcAx+FVnIVesXDeRScW1KM4uwIH8V0yHkV3PYpbjFnifzsDt2J3Il+Mg9hTq+LJcuAr\nYnk/VKviJtKJe3AIv2I2Hi3SWJZzcR8O4LGijBbM0yKynsCbOKkZTtyGzzGzAbaWGJ9K6mEh/hC5\nfD1uETmvcC7AXpFkU0dGcXUDbJfRn5Oua7EjJ10VkYbwXyLnDSfyfPyJnY10Jge+FZtCSofYNAqr\nd9PQ2YHnsBn/iEJzrditsvTiGVyBnkl0jmIVPszb2QoYEnnvLvyCY7El8akQqnkzHaLoHMKnuEpU\n9d/jbjwldr6D+Fi8iEooo5ToOaq5CZdl5NfRlYy31KG3LL8c2HCq2f1ezIxPSJ79W1T5p+Tp1HSi\n1vJhPT5JxgvFRE7FC+JQP5G5WCbCfyIbRTnV8oxO8TORnTg/Ga/BN3XYLqsshKfysSk/6QqsZjNJ\nuzZfJHKvWEU9xpcQeTOVj53YJHZeeKRAX8YZrZZ7sc1Y2A6LyVudl1M1sgbviIlbjvMaYTQ7gcvF\nIbwkJmjlJM8sxbMZeQg/qO1l5MkCXJ+M9+DMRhqfiYcz8jrRDzy9AbbL8iljZhjrX76POTnorJgl\novBNm4u9Ikmua4Dtx3FqjvouxAM56quIDhHCaaJeJCbwnEY7Uid9eLDZTsBLCmxCFsgm0UnvVt2m\ntjlPJzaKnWy63djdIC6H9olO9OIqni3l5cRaMYFEadKfl+KcGMAG0S2/EbfjLdF+q4fSJL/vElee\nz4vTEpwsczrKlh6rxP3BVpHUL8VpdTqWJ73i2FjGB7hTtO/3i4qhCK4UTZPsYroIP6YfSMN0Pr70\n/xZ+n5zuTHOgR1QKh0TJNWJ86VUps0X7LZuiVuCjjLxfXKj1JfJuMYEH8GQiT9c7I0QIpWfxviN9\nsEJKR/jbdXgjI+8Sl29o/umhGi4XJ6V+sUEMiVW0oWC7c4zdG/cn8n9XHV2HeaBVGRD16SxxXbBM\n1KmvidCqh0GRVw/HXvFNjW7xAofxcp32jjrur/Bz20St2aZCFuEnkSoG8JWxdhmmVwg3g04xefNw\nifjCwUhTPWrTpk2bFuJflVvSLV1580UAAAAASUVORK5CYII=\n",
       "prompt_number": 17,
       "text": [
        "\n",
        "        \u2148\u22c5x \n",
        "3\u22c5\u03c0    \u212f    \n",
        "\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\n",
        " 2     2    \n",
        "      x  + y"
       ]
      }
     ],
     "prompt_number": 17
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "exp(I*x).subs(x,pi).evalf()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$-1.0$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAACsAAAASCAYAAADCKCelAAAABHNCSVQICAgIfAhkiAAAAVxJREFU\nSInt1b9LHEEYxvGP0UT00EQRIUiwUJEgsTCEkEZS+keYXv8AG/tgay0pDiSQIl2wsLEOpFBQm4CF\nIRhOm6Bco/ijmBH3zolkZY+cxKd5medhdr47M7svd0gtDXhmJ75iPOe8USxgF+fowxwqhdJl9Arf\n4mJ59Bg/MZ3x5rGFR8WgXek5VlAWdjUv7Hvsoy3j9eIEswXw/VFl+WG/40vC38Ta5eDB7ZkKUxdG\n8COR7eHl5aAZYAdjPUxkVXSjneaA7Y71OJFVY31Cc8Cexpq65w9jbaU5YA9uyEqxHlH7q3iBJX/f\nKDYwkxvtuirCrvYkshJ+S8Bu4k0Bi+dVFet4lsiGhU3Bv7kGI+io81bwWu2pDgkv8LmRMJ+EY+1M\nZJM4w2qd/1Q47ncZbxHbMu22TTHqxzIGMBa9XaG3f8DH6FWED2qnbv4vvBXa7oTQKHoxJf1Lu9f/\nqwtgsDsUgp/FvwAAAABJRU5ErkJggg==\n",
       "prompt_number": 18,
       "text": [
        "-1.00000000000000"
       ]
      }
     ],
     "prompt_number": 18
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "exp(pi * sqrt(163)).evalf(50)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$262537412640768743.99999999999925007259719818568888$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "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\n",
       "prompt_number": 19,
       "text": [
        "262537412640768743.99999999999925007259719818568888"
       ]
      }
     ],
     "prompt_number": 19
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h2>Algebra<h2>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "eq = ((x+y)**2 * (x+1))\n",
      "eq"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\left(x + 1\\right) \\left(x + y\\right)^{2}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAHQAAAAbCAYAAACtOKuoAAAABHNCSVQICAgIfAhkiAAAA+lJREFU\naIHt2VuMXVMcx/HPFB3tVDGhhKQmbcQUbV2CtHVJJur+oCF9cXso8eDBQzuJB4IgaRQPivDkuFQ9\nkHghkUikWsUDDy5N3QcPKq1bSBn3h//ZOfvs2Xtmn2P2nGHONzmZs9b677XWf//X+a3/WkOX/xU9\nnZ5Al7Y4CytxKFbhLrzW0Rl1aZt52Jgqr8V+HNuZ6XT5tyzDX1hcL8/H3yKwXf6D9AjJTbbLk0RA\nTx3voSEcXO28WmYu3s2p78UlUzyX6cRTuD8pzMoxGEI/fp2qGZXgDGzD0py2UbF/zMSgrsPX2FBk\nMA9bK57EMhxY0nYJXkQNbwppKeI5HD5Oe9Wq04pfZZhIeS4TASX8GsgzurNuWCW1osFLPDdeQC/F\nHQVtQ7iyjTFboaY9v8bjBvlBPU8E8+j653KsyOtgFw6Y5EllqakmoAdht7Fn66lQHaoJKGOVZxF+\nEu8i/ZlPs0QsFXr8Z6bD03FtvX4A1+NGHCb2rtvx6eT60Ba/Yw9Oxnup+mFsybHvpF8DWC+CswXP\npNpuwhqcXy8/jps11OczHFJmkKvxaKZuER7WSJ5q+EjcUqwS56H1JZ1IqKnmF0o4f02mLk91Ou3X\nI5gtApXN3N/Cs6lykfLkks5yj8SPmfYNuEU4CH34HjvxJR4QjkwXvhN7SkKR6nTSr7OxA7/hIrGQ\nEvpwmsjoE9LKMyHpgPbij0z7JqHXCSvwSv37V+LFfFtmoCliVLNPy/Fxjl0n/foEzwtZv0DzdrBS\nbIPZe9nPcUqZztN76D4szOko4YT6JF4t0zGeEC80y0KcKVZolnV4u2T/efRrXvF5qkNn/dpT/7sW\nP+OllN05Ig67Ms9nlaeQdEBHcPE4tkP1ye5M1S1WnDhcV1BfExv8SIn5tcoCkTQk5KlOlk75daFY\nRKOpunOx3dhcIas8haSNXheH44Q5uFfjdma12MD3p54dLjPIFHIi3kiV9xl72TBd/DoOH6bKveKO\nNu/fYP34pkyn6YD+gg+EBBEH2mFx+TuI4zWvpluF/EwVyS3P3IL2QbwjkoiEERyVsZsufn0hApWw\nUfi4Lcc2qzylWY7N9e9HiGPAJrGi+4Sjj9VtVrczgNbS+wV4Ge9rHKD3Cqm6KmO7WVwVppljbFI0\nHfwiFtMOPFSfx3b8IF9ad4vjS1vcI6SrKmom/0ZlCe4uaHtBQ3WqpKZ9v2aJZOnJnLZBzRcPLdMj\nZKeqi+wHlczYSjIbtyk+eKdVp0pa8Wur5guFNSIxyyoM+coz46ladVplr8YiO0bsj9kthPGVZ0ZT\nteq0yhUiCboPT4vsNstEytOlS5cuXbp0mUT+AUnR4eM/KSdDAAAAAElFTkSuQmCC\n",
       "prompt_number": 20,
       "text": [
        "\n",
        "               2\n",
        "(x + 1)\u22c5(x + y) "
       ]
      }
     ],
     "prompt_number": 20
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "expand(eq)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$x^{3} + 2 x^{2} y + x^{2} + x y^{2} + 2 x y + y^{2}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAQ0AAAAbCAYAAABm6to6AAAABHNCSVQICAgIfAhkiAAABP5JREFU\neJztnFuIV0Ucxz+7SFtpGQW1uJTrpQw0w0u26XYh8kWCksyHAiOMQgwKrKduDxotXR8qIbpN96AL\nEaUSkdpLGBVUEBiVFD3YBaIIKSPr4Xf+dDz+d3d+czlzTv/5gOyZmXN+8/v+ZpwzM2d2IZPJZBT0\nOT53ATATGAAuAgzwbhiXknAusByYDqwANgPvJ/XIj6wn40OUeP8MXFNcXwkcAI7zNZqIacBYKb0W\n0TOUxh1vsp6MD9HivQCYWlyvAf6ivYPGQuAQMKdIHw/8gwSrjWQ9GR9qifeLwG0hDdZMHzId6yzV\n5iNBWpTMIz+ynowPUeO9GLgFeBw4NoRBBcuA14HtwOfAk4Sbrj4HPBDIVhPIevyJ2d+aTpR4Xw98\njKyF6mAx8A5wQpGehmzS/AgMe9peD9yL+wZx08h6/InZ35pOsHiPAD8As4r0mcj0ZY2HzYXAFMt7\n3wbmVvIWFT687OHDpUiQAI6mng6h0a0lpJ6YftqSSk+s/haSGO0T9P/DUuA95HMrwCrgIEcGVoNR\nOPU78B1wciX/F+SrjgsXIgEaLP5dDpznaEuDIc7gFFqPIe1bNaWeGP0tNIaw7TNhvF1Gp4+Ap4Ab\nkV3WUWRU+srXU0v2AWfw39ebDn/i9gVnNvAWRy6vpjvYagJZT1hC97emM2m8q4PGEmAd8Dcycl0H\n3ICs54aAu4CvgedLzzwU0mMLRpDG2l/KmwGcAuyq3GurR9P4w8AmJLgvIF+POmwEVgOXKOxpiKEn\nBrZ+DmMXy5R6YvS3YdL1IZu6reM9G3gU6C/SBvgSORm2AplVbPJ0eDwMftOrMaShlpfyYunZChwF\n3AR8Vinbg26da7DX3Zb20fgZMpYaDGn7W2jdBns9QeveyuEjzCuFEYBTgfuBkzQGFRjcG3Eusu7c\nUsmPoWcUuKq43g68Wiqbihxy26CwZ9A1dhvax9bP0LHUYEjX32LoNtjpCV73rEr6e+BujQEPDG6N\nOAB8CDzYpSyGnsGiziHkTbO6VLYS2VGfr7BnsNfdlvax9TN0LDUY0vW3GLoNdnqC1F3e09hXup5X\nGN5p4YiGZ4Czu+SfhhygOdilbD1yDqRKH/A0sAO4s0t5DD2dde1a5G2zrVR2PrKb/kWX50Lobkv7\n2PrpGksNTexvPrp99USN+QZkd7h80nPOOPeGwKAf+bcAd1Ty1o1zb2g9O4A3Knm7kFODGgxub7w2\ntA/Y+RkqlhoM6ftbSN0GnR6vujubNscgJ7/OKtIrkU2SA6X7blU4FZtrkY2lzZX80eJnbD0zgb2l\n9AByXj/Wr2u3pX1c/Kw7li7E6G8pdXvV3VmerEJEfYJshpwO/Fq673ZkatQELgbuQ0bL8qffKcia\nDOLr+RY4sZQeQ07N7fawORFtaR8XP+uOpZZY/S2lbq+6O4PGbmSKswQ5az+C7AY/hqyT3gQ+COKu\nP68h372v7lLW2dGOredm4AngEeRtshTpJJ962JyItrSPi591x1JLrP6WUnfTY26Fob2//NOPbDA9\n6/CsoR26DfX46RNLDYZmxd1Xt8Fdj7ru/slvqYXfgD9SO2HJSxx+KOYyZKp3j4OttuiO5WfIWGpI\nHffQujV6UsW8p/kJeLi4ngF8Q/epa2ZyejWWKXV71/1/+TsLdXIFcA6yHzSINMCeCZ/IjEevxjKl\n7l6NeSaTyWQymUwmk8lkMpke518QvOZokU+z1gAAAABJRU5ErkJggg==\n",
       "prompt_number": 21,
       "text": [
        "\n",
        " 3      2      2      2            2\n",
        "x  + 2\u22c5x \u22c5y + x  + x\u22c5y  + 2\u22c5x\u22c5y + y "
       ]
      }
     ],
     "prompt_number": 21
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "a = 1/x + (x*sin(x) - 1)/x\n",
      "a"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\frac{x \\operatorname{sin}\\left(x\\right) -1}{x} + \\frac{1}{x}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAFwAAAAbCAYAAADxsuiMAAAABHNCSVQICAgIfAhkiAAAApZJREFU\naIHt2U2IzVEYx/HPjBnvZspbLEZMUfKWvJMkymoyFqSmwTSTYiNvZWlpjSgLXVl4SbGTkpQNo0kR\nGiOlLCgLQiHTWJxz6zY13f/cuS//mbnfup3nPp37/M5z/uc85z9nqDIqWYm3lR7EIGbgDhaMRd1J\nWFRKgWHShbMYwMJxoJsaKpX4kLp1OfYWLMYq9GAaduEUPqAFTfiBelxFLY5gNa6gGzNxENtwDkvR\nGH97MmotwbsEuhPQV3DaKaYBndHejWfRvoZ5Ql16GX1zcD/aezAX17E3+rqEB9KH/Tnxf0W7HjsT\n6jZg4wjySu0K/ytMGmzC3WgfjO0UIflXeIBD0f8QNdiOw9F3S3gIk3Az+tbgTbQ34HVCXcLOeIqj\naB46R8+jdrFZKYz9XwliI2zrddFujG2NMOmteCSUiixHcFEoBfXRdwCZnD6XcCLGaxNKRRJdaC8g\nhyzFWOGZAmIMqVsb2xYcj52W44UwyYei7yv6cQ+X8SknRrtQAjpyfDuEByPG2Ycbwi74hukJdLP0\nJ0pxlJBdaVuwDLPwBOuFg/A2vgvbqUmop7NxISfG2hinF++j77SwC37G75tj2yOcBSvwMY/uL2Hy\nm2Ps4dAmlKC1mC+cB93DjJGlFY+FhVJO3aKyNWG/NZhayoEkIKOIB29d/i4l4UnCfj0lHUUFqM3f\npUoxqan0AFLENeGPr8EswGfhFXYwnQrchQPj7DMcMpLV8ETa2RpeXekjJ9EcVmt4mSn3W0q+C7LR\nTqryy3dRlVYyktXw1OU3GROjfQ5nKjGIAjgv2YSlOr+hLqrGCqnIL/ei6o9wftTgWKUGVGQS5VfO\n18EO4W6kV7jq7cdv4R+uX8o4jlIx1vOrUqVKlXHPf/7/z/ovQQllAAAAAElFTkSuQmCC\n",
       "prompt_number": 22,
       "text": [
        "\n",
        "x\u22c5sin(x) - 1   1\n",
        "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\n",
        "     x         x"
       ]
      }
     ],
     "prompt_number": 22
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "simplify(a)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\operatorname{sin}\\left(x\\right)$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAADAAAAASCAYAAAAdZl26AAAABHNCSVQICAgIfAhkiAAAAmlJREFU\nSInt1kuIz1EUB/DPjJnJ36M8SnnkmYiGopT3ZiYbeSQlZSQiUSaPsEAWLLxSQrKgKFaKhZLEQgoh\nBgvlkRQLRXkrj8W5/+bO3/+/ME1Jzbd+de+595x7zj33fM+P/xxd2qnXFy2ow42Oc+fvUd1Ova74\ngPsd6EsnOvEvUFVGNhjb8Blf8BV78QljsAZDcBpnM725aMB4LEUfLExr07AbF7P91WjEpTSfiCb8\nwFCswCr0wkDsQE3y6WWlgAp4gtFpPgJvMQ+1OCaYqxkPMr06HEzj27iODVovaEuZQxeiRxoPx2Gt\npHIy+TEFU/Ez2YPluZFSFmpEv+yw98mxy5iPc+KGZuNxpjczOV2VnHmD/fiV1qsE9eboj49pvDEF\n+TPNu+OdoOiXOJCCgucYqwJmpEOf4hCmZ2tDxO0PTwfNKnGmgHFJP9cjnlreLwoii0UMK9n/Crsq\n+NgXyyoFAJuTgV/pW1OyvhsvlO8hzaJ26jJZrcjk1kw2QLzxchiVzm2osF5TYqsixuKmtk+lBq9F\nkRPZyHEeV0pkc0TGhorABqGbthnIsRrf0p4iRmTj3lhbnOS3eE7bwnyEU3iWyWaJGjmRnFmbrVWL\nJ3itxKEmXBVZm4+RIkvF35gC9qA+zRuTH58zu5sye/WCKP5AsViK6Cfe7aRMth730rg5O5SgwXLv\n/wHWiYCPa2WmJvFLsiDpLRLs1yIIoYjtmJzNV2Y22vSBmekroKdggqO4le0ZgDO4g7uiFxQxR9TH\nBHzP5IuxRLDHPq0ZrRO3fVP0mbcpkJ04IvrPd1wQLEjURy0e6kQnOga/Ab1KfWxsUtBAAAAAAElF\nTkSuQmCC\n",
       "prompt_number": 23,
       "text": [
        "sin(x)"
       ]
      }
     ],
     "prompt_number": 23
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h2>Calculus</h2>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "limit((sin(x)-x)/x**3, x, 0)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$- \\frac{1}{6}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAABkAAAAeCAYAAADZ7LXbAAAABHNCSVQICAgIfAhkiAAAAPZJREFU\nSInt1T8vBEEYx/GPP1GhcgnB3UanUJ1GQq3xCkhEobh4E5QqL8Ab0HgBKnpRXKNVSzQkEolmFTMr\nS0RCnk1c3LeZZ2cnv+/M7O4sA8YUztFuSrCPI5QompJUfCkZbdo6lPxNyVhQzg4OsIo5zOI6KPu/\nMVKrV3D6qe87+uj9VPJbyoCMASFiuyp2pX/JPaZxEpgN9nCc6wKvmIkUTOABnVrfUn3AeIBkTZp1\nB+vo4gJ3AdnvbEuv8Ua+nsQjFqoBEafwU25vcvuMF2xFSvrSSuoneinmUXzgEpu5bkmrm69uRn0n\nizjELZZxhqug7CEN8AajfR9caTPg4AAAAABJRU5ErkJggg==\n",
       "prompt_number": 24,
       "text": [
        "-1/6"
       ]
      }
     ],
     "prompt_number": 24
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "(1/cos(x)).series(x, 0, 6)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$1 + \\frac{1}{2} x^{2} + \\frac{5}{24} x^{4} + \\operatorname{\\mathcal{O}}\\left(x^{6}\\right)$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "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\nNfEf/bCaiZS/zxYAAAAASUVORK5CYII=\n",
       "prompt_number": 25,
       "text": [
        "\n",
        "     2      4          \n",
        "    x    5\u22c5x           \n",
        "1 + \u2500\u2500 + \u2500\u2500\u2500\u2500 + O(x**6)\n",
        "    2     24           "
       ]
      }
     ],
     "prompt_number": 25
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "diff(cos(x**2)**2 / (1+x), x)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$- 4 \\frac{x \\operatorname{sin}\\left(x^{2}\\right) \\operatorname{cos}\\left(x^{2}\\right)}{x + 1} - \\frac{\\operatorname{cos}^{2}\\left(x^{2}\\right)}{\\left(x + 1\\right)^{2}}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "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\n",
       "prompt_number": 26,
       "text": [
        "\n",
        "                           2    \n",
        "         \u239b 2\u239e    \u239b 2\u239e       \u239b 2\u239e\n",
        "  4\u22c5x\u22c5sin\u239dx \u23a0\u22c5cos\u239dx \u23a0   cos \u239dx \u23a0\n",
        "- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n",
        "         x + 1                 2\n",
        "                        (x + 1) "
       ]
      }
     ],
     "prompt_number": 26
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "integrate(x**2 * cos(x), (x, 0, pi/2))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$-2 + \\frac{1}{4} \\pi^{2}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAAAfCAYAAABNjStyAAAABHNCSVQICAgIfAhkiAAAAq9JREFU\naIHt2EuojVEUwPHfRZHHvUYIISQlRHnfECKPZKA7UUoMDMxk5lUMbsRUlBwxUIRCxEQmpEhRwsBj\noEgp5FUug/2dfD7nuue79nlczr927b2/fdZa3zprr7X6aJCLplobUIfMwly0YB724EZNLYrMIJzB\nqAiyBqI9tW7DR4yIILsu2ITd+I4xEeRNQQfGJevmRHZbBNl1RSyHNQlXspiqJiWyp0WQ/RszcRaX\ncR9HVS+UYzksywkcqIBc03EVg5P1QCFRvlaZF8lSCYdtxD4VKoyXMD6zN014kVPdkDcFfXKcj+2w\nVYLDoF9k2eADXmBIZv8t3nRDXkE+I2M6bIHgrGHJWIM5xYd5/sU/8RQTMCCz/0Uo+z2FsbgopJQ0\nLcVJr0iKZmO04LgiwzEUtyPpKMU6HErm7djSyblmITV8EqKx1OgQitQgIW+lx7vKmP8r7fgmdM15\nKYh3xZpwHruwDIeF/m2JEE0rknmreAGUm/FCXtvbzd8XxHPYeixPrU+jdzK/EEnHX9FXuIYH/0JG\nQWXakcE4l8z741ZeAemkPxlHlN933MPmzF4TjuEKdpYh4zimltgfJTTCX0s824g7ZdqYZR1uJvOJ\nQsqoKXuxI7O3vhtyCrqOsM6Sd3pkuYcZyXwlHuU1LGaS2yBUmj2Z/daIOtJkK1mpkWa+UMnvJutm\nIZL75VEaqw9bhP3CVTyZkV/qn64FW3HNz2v4UnBWsVpWlbc6vxbZiCuHgvxJ/4A/R/MzLE2tm/Ec\nq3PqqUsK8jlsAV5hYQVs+YWaNWpd8A6fyzzbIlTah5Uz599im9D7XfcfR1i5rBY+WH6plsKe7LDh\nQuf+oJpKe3d9pG5ZKzitNRkrhKvZgSc1tKvH8EwVclhPjrAiI7Edi4Xvb+/xuKYWNWjQoEGd8gMf\nLn+HXur2nAAAAABJRU5ErkJggg==\n",
       "prompt_number": 27,
       "text": [
        "\n",
        "      2\n",
        "     \u03c0 \n",
        "-2 + \u2500\u2500\n",
        "     4 "
       ]
      }
     ],
     "prompt_number": 27
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "eqn = Eq(Derivative(f(x),x,x) + 9*f(x), 1)\n",
      "display(eqn)\n",
      "dsolve(eqn, f(x))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$9 \\operatorname{f}\\left(x\\right) + \\frac{\\partial^{2}}{\\partial^{2} x}  \\operatorname{f}\\left(x\\right) = 1$$"
       ],
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nRK5CYII=\n",
       "text": [
        "\n",
        "           2          \n",
        "          d           \n",
        "9\u22c5f(x) + \u2500\u2500\u2500(f(x)) = 1\n",
        "           2          \n",
        "         dx           "
       ]
      },
      {
       "latex": [
        "$$\\operatorname{f}\\left(x\\right) = C_{1} \\operatorname{cos}\\left(3 x\\right) + C_{2} \\operatorname{sin}\\left(3 x\\right) + \\frac{1}{9}$$"
       ],
       "metadata": {},
       "output_type": "pyout",
       "png": "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\n",
       "prompt_number": 28,
       "text": [
        "f(x) = C\u2081\u22c5cos(3\u22c5x) + C\u2082\u22c5sin(3\u22c5x) + 1/9"
       ]
      }
     ],
     "prompt_number": 28
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "# Illustrating Taylor series\n",
      "\n",
      "We will define a function to compute the Taylor series expansions of a symbolically defined expression at\n",
      "various orders and visualize all the approximations together with the original function"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "def plot_taylor_approximations(func, x0=None, orders=(2, 4), xrange=(0,1), yrange=None, npts=200):\n",
      "    \"\"\"Plot the Taylor series approximations to a function at various orders.\n",
      "\n",
      "    Parameters\n",
      "    ----------\n",
      "    func : a sympy function\n",
      "    x0 : float\n",
      "      Origin of the Taylor series expansion.  If not given, x0=xrange[0].\n",
      "    orders : list\n",
      "      List of integers with the orders of Taylor series to show.  Default is (2, 4).\n",
      "    xrange : 2-tuple or array.\n",
      "      Either an (xmin, xmax) tuple indicating the x range for the plot (default is (0, 1)),\n",
      "      or the actual array of values to use.\n",
      "    yrange : 2-tuple\n",
      "      (ymin, ymax) tuple indicating the y range for the plot.  If not given,\n",
      "      the full range of values will be automatically used. \n",
      "    npts : int\n",
      "      Number of points to sample the x range with.  Default is 200.\n",
      "    \"\"\"\n",
      "    if not callable(func):\n",
      "        raise ValueError('func must be callable')\n",
      "    if isinstance(xrange, (list, tuple)):\n",
      "        x = np.linspace(float(xrange[0]), float(xrange[1]), npts)\n",
      "    else:\n",
      "        x = xrange\n",
      "    if x0 is None: x0 = x[0]\n",
      "    xs = sym.Symbol('x')\n",
      "    # Make a numpy-callable form of the original function for plotting\n",
      "    fx = func(xs)\n",
      "    f = sym.lambdify(xs, fx, modules=['numpy'])\n",
      "    # We could use latex(fx) instead of str(), but matploblib gets confused\n",
      "    # with some of the (valid) latex constructs sympy emits.  So we play it safe.\n",
      "    plot(x, f(x), label=str(fx), lw=2)\n",
      "    # Build the Taylor approximations, plotting as we go\n",
      "    apps = {}\n",
      "    for order in orders:\n",
      "        app = fx.series(xs, x0, n=order).removeO()\n",
      "        apps[order] = app\n",
      "        # Must be careful here: if the approximation is a constant, we can't\n",
      "        # blindly use lambdify as it won't do the right thing.  In that case, \n",
      "        # evaluate the number as a float and fill the y array with that value.\n",
      "        if isinstance(app, sym.numbers.Number):\n",
      "            y = np.zeros_like(x)\n",
      "            y.fill(app.evalf())\n",
      "        else:\n",
      "            fa = sym.lambdify(xs, app, modules=['numpy'])\n",
      "            y = fa(x)\n",
      "        tex = sym.latex(app).replace('$', '')\n",
      "        plot(x, y, label=r'$n=%s:\\, %s$' % (order, tex) )\n",
      "        \n",
      "    # Plot refinements\n",
      "    if yrange is not None:\n",
      "        plt.ylim(*yrange)\n",
      "    grid()\n",
      "    legend(loc='best').get_frame().set_alpha(0.8)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 29
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "With this function defined, we can now use it for any sympy function or expression"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plot_taylor_approximations(sin, 0, [2, 4, 6], (0, 2*pi), (-2,2))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nRK5CYII=\n"
      }
     ],
     "prompt_number": 30
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plot_taylor_approximations(cos, 0, [2, 4, 6], (0, 2*pi), (-2,2))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n"
      }
     ],
     "prompt_number": 31
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Exercise: illustrate the convergence radius of a Taylor series expansion"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Remember that a Taylor series is useless beyond its convergence radius, as can be nicely illustrated by \n",
      "a simple function that has singularities on the real axis.  Use the `plot_taylor_approximations` function to show how badly various orders (say $n= 2, 4, 6$) converge for $f(x) = \\frac{1}{\\cos(x)}$."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}